#include <iostream>
#include <vector>
#include <string>

using namespace std;

int count = 0;

/*inline bool is_number(char c)
{
    return c >= '0' && c <= '9';
}*/

/* inline - serve para evitar um gargalo que ocorre quando o ponteiro vai apontar para uma nova funcao. O que ocorre eh que ele vai copiar e colar em vez de compilar de novo. */

inline void fill_with_0(vector<string> &field)
{
    for (int i = 0; i < field.size(); ++i) {
        for (int j = 0; j < field[i].size(); ++j) {
            if (field[i][j] == '.') {
                field[i][j] = '0';
            }
        }
    }
}

inline void increase_field_size(vector<string> &field)
{
    for (int i = 0;i < field.size();++i) {
        field[i].insert(field[i].begin(), '0');
        field[i].push_back('0');
    }
    string s(field[0].size(), '0');
    field.insert(field.begin(), s);
    field.push_back(s);
}

inline void do_the_smart_thing(char &c)
{
    if (c != '*')
        ++c;
}

inline void compute_field(vector<string> &field)
{
    cout << "Field #" << ++count << ":\n";
    fill_with_0(field);
    increase_field_size(field);
    
    for (int i = 1, size = field.size(); i < size; ++i) {
        for (int j = 1, size = field[i].size(); j < size; ++j) {
            if (field[i][j] == '*') {
                do_the_smart_thing(field[i-1][j-1]);
                do_the_smart_thing(field[i][j-1]);
                do_the_smart_thing(field[i+1][j-1]);
                do_the_smart_thing(field[i-1][j]);
                do_the_smart_thing(field[i+1][j]);
                do_the_smart_thing(field[i-1][j+1]);
                do_the_smart_thing(field[i][j+1]);
                do_the_smart_thing(field[i+1][j+1]);
            }
        }
    }
}

inline void print_field(vector<string> &field)
{
    for (int i = 1;i < field.size() - 1;++i) {
        field[i].erase(field[i].begin());
        field[i].erase(--(field[i].end()));
        cout << field[i] << '\n';
    }
}

int main () {
    int n, m;


    bool f=true;

    while (cin >> n >> m
           && n && m) {

        if (f) f = false;
        else cout << '\n';

        vector<string> field;
        field.reserve(n);
        for (int i = 0;i != n;++i) {
            field.push_back(string());
            field[i].reserve(m);
            cin >> field[i];
        }
        
        compute_field(field);
        print_field(field);
    }

    return 0;
}
